package db

import (
	"gin-demo/internal/models"
	"log"
	"os"
	"time"

	// "gorm.io/driver/mysql"
	"gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

// ConnectDB 连接数据库并返回连接池
func ConnectDB() (*gorm.DB, error) {
	// dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
	dsn := "./gorm.db"

	// 检查数据库文件是否存在，如果不存在则创建
	if _, err := os.Stat(dsn); os.IsNotExist(err) {
		file, err := os.Create(dsn)
		if err != nil {
			return nil, err
		}
		file.Close()
	}

	db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info),
	})
	if err != nil {
		return nil, err
	}

	sqlDB, err := db.DB()
	if err != nil {
		return nil, err
	}

	// 配置连接池
	sqlDB.SetMaxIdleConns(10)
	sqlDB.SetMaxOpenConns(100)
	sqlDB.SetConnMaxLifetime(time.Minute * 3)

	return db, nil
}

// AutoMigrate 自动迁移模型
func AutoMigrate(db *gorm.DB) {
	err := db.AutoMigrate(&models.User{})
	if err != nil {
		log.Fatalf("failed to auto migrate models: %v", err)
	}
}
